home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d13 / rio2.arc / RIO.DOC < prev    next >
Text File  |  1991-03-19  |  17KB  |  345 lines

  1. RIO 2.0 (Released 3/91)
  2.  
  3. Beware: RIO can cause your system to hang (it's not common, but it can
  4. happen), forcing you to reboot.  If you find a way to consistently hang the
  5. program, please let the author know - it would help in eradicating the
  6. bug(s)!
  7.  
  8. Purpose
  9.  
  10.     RIO-TSR (Rock Input/Output) is a memory-resident program (takes about
  11.     80K) that logs all DOS disk I/O operations and other functions to a
  12.     file for later study.  It can be useful in debugging software and
  13.     network problems by showing what DOS calls are made along with their
  14.     results, without the need to delve into a program's source code.
  15.  
  16.     RIO-TSR is a memory-resident (TSR) program that logs DOS I/O operations
  17.     & functions to a text file for later study.  It's useful for debugging
  18.     software and network problems by showing DOS calls & their results,
  19.     without the need to delve into a program's source code.
  20.  
  21.     With RIO 2.0, there is now a non-TSR program, RIO, which lets you
  22.     browse the log file and change the RIO-TSR's settings, for example to
  23.     log only certain interrupts.  The new version also logs Novell Netware
  24.     & direct disk I/O calls.
  25.  
  26.     RIO is geared towards programmers, but advanced non-programmers may
  27.     find it of use as well.  For example, it's possible to detect problems
  28.     in a program such as not closing a file without really understanding
  29.     how interrupts work.  But the more you understand about DOS interrupts
  30.     the more you'll get out of RIO's reports.
  31.  
  32.     RIO can be useful in "reverse-engineering" how a program accomplishes
  33.     certain tasks, or in decoding a data file format by listing the number
  34.     of bytes read/written during each DOS call (see the section on File
  35.     Reads & Writes).
  36.  
  37.     RIO can also point out inefficiencies in a program, for example if the
  38.     program checks a file size fifty times, when it could have checked it
  39.     once, stored it in a variable, and not wasted time accessing hte disk
  40.     repeatedly.
  41.  
  42.  
  43. Loading the TSR
  44.  
  45.     To install, type
  46.  
  47.          RIO-TSR [filename]
  48.  
  49.     If you type just RIO-TSR, the log file defaults to C:\RIO. If the file
  50.     already exists, you'll get the following prompt:
  51.  
  52.     C:>rio-tsr
  53.     RIO-TSR 2.0 (3/91) - Rock I/O logger, (C) 1991 Rock
  54.  
  55.     File C:\RIO already exists; append, erase & overwrite, or
  56.     cancel (a/e/c)?
  57.  
  58.     If you type A or E, the program will "go resident", operating in the
  59.     background, and you'll be returned to the DOS prompt. If you type C,
  60.     RIO-TSR will not go resident.
  61.  
  62. HotKeys
  63.  
  64.     Certain aspects of RIO can be controlled by pressing hot keys after it
  65.     has gone resident. The following table lists the hot keys:
  66.  
  67.       LeftShift-RightShift-L  Toggle logging
  68.       LeftShift-RightShift-C  Clear log file
  69.       LeftShift-RightShift-U  Unload TSR
  70.  
  71.     When logging is off, no further I/O operations will be logged until it
  72.     is turned on again.  If your system is slowed down with file accesses
  73.     you're not interested in, you should turn logging off.  After logging
  74.     is resumed, new operations are appended to the existing log file.
  75.  
  76.  
  77. Command-line switches
  78.  
  79.     You can unload RIO-TSR or toggle logging by using running RIO-TSR
  80.     with command-line switches.  Type "RIO-TSR /U" to unload the program,
  81.     or "RIO-TSR /L" to toggle the logging on or off.
  82.  
  83.  
  84. Running RIO
  85.  
  86.     RIO allows you to turn on or off logging of particular interrupts.
  87.     After you load RIO-TSR, run RIO, and it will provide a full-screen
  88.     program with pulldown menus.  Commands are listed at the bottom of
  89.     the screen, and the program will hopefully be self-explanatory.
  90.  
  91.  
  92. Operation
  93.  
  94.     The log file created and repeatedly updated by RIO-TSR is a text file
  95.     showing information about each DOS I/O call.  It lists the call number,
  96.     its operation, input and output from the call, the time, and/or the
  97.     date, according to the settings, which are adjustable from the program
  98.     RIO.EXE.  The following are taken from a sample log file:
  99.  
  100.     ┌──────────────────┬─────────────────────────────────┬──────────┐
  101.     │Operation         │Information sent -> returned     │Time      │
  102.     └──────────────────┴─────────────────────────────────┴──────────┘
  103.     Get Break Flag      -> Off                           16:16:21.16
  104.     Set Break Flag      Off                              16:16:21.16
  105.     Open (Read-only)    C:\COLORS.RIR -> Handle 5        16:16:21.55
  106.     Close File          Handle 5                         16:16:21.55
  107.  
  108.     The -> symbol in the "Information sent -> returned" column means that
  109.     the information was returned from teh call.  A "get" call typically
  110.     just returns information, while a "set" call typically just sends
  111.     information to the interrupt procedure.  In the case of the "Open
  112.     (Read-only)" call, a file name is sent to the interrupt, and a handle
  113.     number is returned.  Each opened file is assigned a handle number, and
  114.     subsequent calls relating to the file will use that handle number (as
  115.     in the next call, Close File).  The maximum handle number can be set by
  116.     the "FILES=" command in a config.sys file, for example "FILES=20" means
  117.     up to 20 handles may be assigned at the same time.
  118.  
  119.     Note that RIO-TSR does not log its own I/O operations.  RIO, the
  120.     non-TSR program, will cause some I/O operations to be logged.
  121.  
  122.     RIO-TSR will put a special message in the log file if it is unable to
  123.     log all the information.  RIO-TSR uses a memory buffer to hold log
  124.     information until it is safe to write it to disk. If the buffer
  125.     overflows before it can be logged, the log file will contain a line
  126.     indicating how many lines were lost.
  127.  
  128.     RIO-TSR will also put a line in if the same interrupt is called
  129.     repeatedly, for example if "Find Next File" is called 100 times, it
  130.     will list the first three calls, then say "call repeated 97 more
  131.     times."  The number of calls to list before saying it was repeated is
  132.     adjustable from RIO.
  133.  
  134.     For the technically minded, Appendices A & B list the interrupt $21
  135.     functions that can be logged.
  136.  
  137.  
  138. File Reads & Writes
  139.  
  140.     File Read/Write calls (Interrupt $21, finctions $3F and $40) are by
  141.     default not logged, because some programs call these functions a *lot*,
  142.     and the results generally aren't that interesting.  However, you can
  143.     have these functions logged by turning them on from RIO's "Interrupts"
  144.     menu.
  145.  
  146.     Logging these interrupts can be very useful in trying to decode an
  147.     unknown file format that a program uses.  If the program writes each
  148.     field with a separate call, you can see exactly how many bytes it
  149.     writes per call.  As a simple example, if a database program keeps
  150.     writing 4 bytes, 1 byte, 2 bytes, and keeps repeating this sequence,
  151.     it's indicative that it's writing fields of those lengths (perhaps a
  152.     date, followed by a boolean value, followed by an integer).  File
  153.     headers, the initial area of data files, are often written and read one
  154.     variable at a time.
  155.  
  156.  
  157. Failed DOS calls
  158.  
  159.     Unsuccessful or "failed" DOS calls are usually listed with the the
  160.     error code they return.  Note that a DOS call returning an error does
  161.     *not* indicate a program bug.  For example, to determine if a file
  162.     exists, many programs try opening the file, and if it fails, it knows
  163.     it doesn't exist.  As long as the program you're running realizes when
  164.     DOS reports an error, rather than trying to write to a file it never
  165.     successfully opened, then the program should work fine.
  166.  
  167.     RIO plays sound effects when it issues functions called by hotkeys.
  168.     When logging is toggled, "on" is denoted by a rising scale of tones,
  169.     "off" by a falling scale.  Clearing the file results in a muddy
  170.     warbling sound, and successfully unloading RIO-TSR results in the first
  171.     few notes of Taps being played.
  172.  
  173. File Attributes
  174.  
  175.     Get Attr, Set Attr, and some other file-related calls are followed by
  176.     attribute codes given in brackets, for example "[RHSVDA]".  A sample
  177.     line from a log file would be:
  178.  
  179.     Find First File     [RHS DA] C:\*.* -> .
  180.  
  181.     This means the Find First File is looking for a file with any
  182.     attributes other than the Volume attribute, and the "." directory entry
  183.     was returned.
  184.  
  185.     The letters within brackets stand for the following file attributes:
  186.  
  187.             R - Read only   H - Hidden     S - System
  188.             V - Volume      D - Directory  A - Archive
  189.  
  190.  
  191. New Features
  192.  
  193.     The logging of each function is configurable, so the logging of
  194.     particular Int $21 functions can be turned on or off.  Also, features
  195.     such as time/date stamping, or logging of interrupt function numbers,
  196.     can be turned on or off.
  197.  
  198.     These options are selectable from a separate non-TSR program which
  199.     communicates with RIO-TSR, so that this larger program won't hog your
  200.     system RAM while you're running RIO-TSR.
  201.  
  202.     Also, this version of RIO-TSR can be unloaded.
  203.  
  204.  
  205. Credits
  206.  
  207.     RIO-TSR is based on the public domain IOLOG 1.0 (12/88) by Kim Kokkonen
  208.     of TurboPower Software, and uses TurboPower's (excellent!) Object
  209.     Professional toolkit for Turbo Pascal. Mr. Kokkonen credits Don
  210.     Pearsall for IOLOG's inspiration. IOLOG provides much less information
  211.     (it logs around a dozen interrupts), and is not as configurable, but it
  212.     is public domain, and the source code is included with Object
  213.     Professional. The user interface for RIO also makes use of Object
  214.     Professional's menu and window routines.  If you're into Turbo Pascal,
  215.     their software and support comes highly recommended.
  216.  
  217.  
  218. Contacting the Author
  219.  
  220.     Any suggestions or ideas are welcome; e-mail Rob Argy on CompuServe,
  221.     CIS [71270,146], or call Rock Systems at (313) 971-9123.  See the file
  222.     ORDERING.DOC or ORDER.FRM for information on registering your copy of
  223.     RIO.
  224.  
  225. Example output - log file, default options
  226.  
  227. ┌───┬───┬───────────────────┬─────────────────────────────────────────────┐
  228. │In#│Fn#│Operation          │Information sent -> returned                 │
  229. └───┴───┴───────────────────┴─────────────────────────────────────────────┘
  230.  $21 $4E Find First File     [RHS   ] D:\B\RIR.EXE -> RIR.EXE
  231.  $21 $47 Get Current Dir     Drive 4 -> 
  232.  $21 $29 Parse File Name      /W
  233.  $21 $29 Parse File Name     
  234.  $21 $35 Get Intr Vector     Int $00 -> $19B3:0898
  235.  $21 $35 Get Intr Vector     Int $02 -> $18E5:0016
  236.  $21 $35 Get Intr Vector     Int $1B -> $0070:07F5
  237.  
  238.                     < call repeated 15 more times >
  239.  
  240.  $21 $25 Set Intr Vector     Int $00 to $432C:00CE
  241.  $21 $30 Get DOS Version     -> 4.0 (OEM #255)
  242.  $21 $38 Get Country Data    -> United States
  243.  $21 $33 Get Break Flag      -> Off
  244.  $21 $33 Set Break Flag      Off
  245.  $21 $25 Set Intr Vector     Int $1B to $4176:0731
  246.  $21 $3D Open (Read-only)    C:\COLORS.RIR -> Handle 5
  247.  $21 $42 Seek Relative       Handle 5, 0 bytes -> (get pos:) at byte 0
  248.  $21 $42 Seek From End       Handle 5, 0 bytes -> (get size:) 395 bytes
  249.  $21 $42 Seek From Start     Handle 5, 0 bytes -> to byte 0
  250.  $21 $3E Close File          Handle 5
  251.  $21 $2C Get System Time     -> 00:15:30.38
  252.  $21 $19 Get Current Disk    -> Physical drive C:
  253.  
  254.  
  255. Example output - log file, time-stamp turned on
  256.  
  257. ┌──────────────────┬───────────────────────────────────────────┬──────────┐
  258. │Operation         │Information sent -> returned               │Time      │
  259. └──────────────────┴───────────────────────────────────────────┴──────────┘
  260.  
  261. Get DOS Version     -> 4.0 (OEM #255)                          16:16:21.16
  262. Get Country Data    -> United States                           16:16:21.16
  263. Get Break Flag      -> Off                                     16:16:21.16
  264. Set Break Flag      Off                                        16:16:21.16
  265. Set Intr Vector     Int $1B to $5C65:0731                      16:16:21.16
  266. Open (Read-only)    C:\COLORS.RIR -> Handle 5                  16:16:21.55
  267. Seek Relative       Handle 5, 0 bytes -> (get pos:) at byte 0  16:16:21.55
  268. Seek From End       Handle 5, 0 bytes -> (get size:) 395 bytes 16:16:21.55
  269. Seek From Start     Handle 5, 0 bytes -> to byte 0             16:16:21.55
  270. Close File          Handle 5                                   16:16:21.55
  271. Get System Time     -> 16:16:21.60                             16:16:21.60
  272. Get Current Disk    -> Physical drive C:                       16:16:21.60
  273. Findfile            [RH  D ] T.???                             16:16:21.65
  274. Findfile            [RH  D ] D:\B\T.???                        16:16:21.65
  275.  
  276. Appendix A - Interrupt $21 DOS functions logged
  277.  
  278. Int $21 DOS functions
  279.  
  280. $01 Read, Echo Keyboard  $24 FCB Set Rel. Record  $48 Allocate Mem Block
  281. $02 Display Character    $25 Set Intr Vector      $49 Release Mem Block
  282. $03 Auxiliary Input      $26 Create New Prog Seg  $4A Resize Memory Block
  283. $04 Auxiliary Output     $27 FCB Rndm Block Read  $4D Get Return Code
  284. $05 Print Character      $28 FCB Rndm Blck Write  $4E Find First File
  285. $06 Direct Console I/O   $29 Parse File Name      $4F Find Next File
  286. $07 Direct Console Inp.  $2A Get System Date      $50 Set PSP Segment
  287. $08 Read Kybrd w/o Echo  $2B Set System Date      $51 Get PSP Seg (buggy)
  288. $09 Display String       $2C Get System Time      $52 Get DOS Variables
  289. $0A Buffered Kybd Input  $2D Set System Time      $53 Translate BPB
  290. $0B Check Kybrd Status   $2E (Re)set Verify Flag  $54 Get Verify Flag
  291. $0C Flush & read kybrd   $2F Get Disk X-fer Addr  $55 Duplicate PSP Block
  292. $0D Reset Disk           $30 Get DOS Version      $56 Rename File
  293. $0E Select Disk          $32 Get Disk's DPB Ptr   $57 Get/Set File Date
  294. $0F FCB Open File        $33 Break Flag/Boot Drv  $58 Get/Set Alloc Strat
  295. $10 FCB Close File       $34 Get DOS Busy Flag    $59 Get Ext Error Info
  296. $11 FCB Find First       $35 Get Intr Vector      $5A Create Temp File
  297. $12 FCB Find Next        $36 Get Free Diskspace   $5B Create New File
  298. $13 FCB Delete File      $37 Get/Set Switch Char  $5C Lock/Unlock File
  299. $14 FCB Seq. Read        $38 Get/Set Country      $5D Internal DOS Functn
  300. $15 FCB Seq. Write       $39 Create Directory     $5E Mach Name/Prn Setup
  301. $16 FCB Create File      $3A Remove Directory     $5F Assignment Entry
  302. $17 FCB Rename File      $3B Change Directory     $60 Qualify Path String
  303. $18 Reservd DOS Fnc $18  $3C Create File          $61 Reservd DOS Fnc $61
  304. $19 Get Current Disk     $3D Open File            $62 Get PSP Address
  305. $1A Set Disk X-fer Addr  $3E Close File           $63 Get DBCS,G/Set Cons
  306. $1B Get Def. Drive Data  $3F Read File            $64 Reservd DOS Fnc $64
  307. $1C Get Drive Data       $40 Write File           $65 Get Ext Country Inf
  308. $1D Reservd DOS Fnc $1D  $41 Delete File          $66 Get/Set Code Page
  309. $1E Reservd DOS Fnc $1E  $42 Seek File            $67 Set Handle Count
  310. $1F Get Def Param Block  $43 Get/Set Attributes   $68 Commit File
  311. $20 Reservd DOS Fnc $20  $44 IOC (I/O Control)    $69 Reservd DOS Fnc $69
  312. $21 FCB Random Read      $45 Duplicate Handle     $6A Reservd DOS Fnc $6A
  313. $22 FCB Random Write     $46 Force Dup Handle     $6B Reservd DOS Fnc $6B
  314. $23 FCB Get File Size    $47 Get Current Dir      $6C Extended File Open
  315.  
  316. Appendix B - Interrupt $21 Novell Netware functions
  317.  
  318. Int $21 Novell Netware FCB functions
  319.  
  320. $BF NW FCB LOG Record    $CC NW FCB Release File  $E6 NW FCB Copy File
  321. $C0 NW FCB Release Rcrd  $CE NW FCB Clear File    $E8 NW FCB St Reopn Mde
  322. $C1 NW FCB Clear Record  $E4 NW FCB Set Attribs
  323. $CA NW FCB Log Prs File  $E5 NW FCB Set FileSize
  324.  
  325.  
  326. Int $21 Novell Netware other functions
  327.  
  328. $B6 NW Ext File Attribs  $CF NW Clear File Set    $E1 NW Broadcast Msgs
  329. $B8 NWAdv Print Jobs     $D0 NW LOG Record        $E2 NW Directory Fnctns
  330. $BB NW Set EOJob Status  $D1 NW LOCK Record Set   $E3 NW Connection Ctrl
  331. $BC NW LOG Phys Record   $D2 NW Release Record    $E7 NW G/Set Srvr Tm&Dt
  332. $BD NW Release Phys Rec  $D3 NW Release Recd Set  $E9 NW Get Base Status
  333. $BE NW Clear Phys Recrd  $D4 NW Clear Record      $EA NW Get Shell Versn.
  334. $C2 NW Lock Phys Rc Set  $D5 NW Clear Recrd Set   $EB NW Log File
  335. $C3 NW Rels Phys Rc Set  $D6 NW End Of Job        $EC NW Release File
  336. $C4 NW Clr Phys Rec Set  $D7 NW System Logout     $ED NW Clear File
  337. $C5 NW Semaphores        $DA NW Get Volume Stats  $EE NW Get Phys Station
  338. $C6 NW G/Set Lock Mode   $DB NW Get Local Drives  $EF NWAdv Get Drive Inf
  339. $C7 NW TTS               $DC NW Get Station Num.  $F0 NWAdv Connection ID
  340. $C8 NW Begin File Lock   $DD NW Set Error Mode    $F1 NWAdv Srvr Connectn
  341. $C9 NW End File Locking  $DE NW Set Brodcst Mode  $F2 NW Unknown Function
  342. $CB NW LOCK File Set     $DF NW Capture           $F3 NWAdv Srvr FileCopy
  343. $CD NW Release File Set  $E0 NW Print Spooling
  344.  
  345.